package com.nangle.managehost.view;

import android.content.Context;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.ViewGroup;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;

import com.nangle.managehost.utils.ScreenUtils;


public class SlidingMenu extends HorizontalScrollView
{  
    /** 
     * 屏幕宽度 
     */  
    private int mScreenWidth;  
    /** 
     * dp 
     */  
    private int mMenuRightPadding =0;
    /** 
     * 菜单的宽度 
     */  
    private int mMenuWidth;  
    private int mHalfMenuWidth;  
  
    private boolean once;  
  
    public SlidingMenu(Context context, AttributeSet attrs)
    {  
        super(context, attrs);  
        mScreenWidth = ScreenUtils.getScreenWidth(context);

    }  
  
    @Override  
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)  
    {  
        /** 
         * 显示的设置一个宽度 
         */  
        if (!once)  
        {  
            LinearLayout wrapper = (LinearLayout) getChildAt(0);
            ViewGroup menu = (ViewGroup) wrapper.getChildAt(0);
            ViewGroup content = (ViewGroup) wrapper.getChildAt(1);  
            // dp to px  
            mMenuRightPadding = (int) TypedValue.applyDimension(  
                    TypedValue.COMPLEX_UNIT_DIP, mMenuRightPadding, content
                            .getResources().getDisplayMetrics());  
  
         //   mMenuWidth = mScreenWidth - mMenuRightPadding;
            mMenuWidth = 200;
            mHalfMenuWidth = mMenuWidth / 2;  
            menu.getLayoutParams().width = mMenuWidth;  
            content.getLayoutParams().width = mScreenWidth;  
  
        }  
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
  
    }  
  
    @Override  
    protected void onLayout(boolean changed, int l, int t, int r, int b)  
    {  
        super.onLayout(changed, l, t, r, b);  
        if (changed)  
        {  
            // 将菜单隐藏  
            this.scrollTo(mMenuWidth, 0);  
            once = true;  
        }  
    }  
  
    @Override  
    public boolean onTouchEvent(MotionEvent ev)
    {  
        int action = ev.getAction();  
        switch (action)  
        {  
        // Up时，进行判断，如果显示区域大于菜单宽度一半则完全显示，否则隐藏  
        case MotionEvent.ACTION_UP:  
            int scrollX = getScrollX();  
            if (scrollX > mHalfMenuWidth)  
                this.smoothScrollTo(mMenuWidth, 0);  
            else  
                this.smoothScrollTo(0, 0);  
            return true;  
        }  
        return super.onTouchEvent(ev);  
    }  
  
}  